前言
2025更新:网站的前端UI是不可能永不改变的,UI的改变往往伴随着实际HTML标签的变动;从而导致我们以前所使用的拦截规则有部分会失效。
而本文不可能每次都跟着修改教程中的图文与拦截规则,所以当你看到本文时,下面展示的拦截规则不一定还能起效,无法直接照搬过去。
因此,我由衷的希望你学习了本文介绍的拦截规则编写方式后,能编写出属于你自己的规则。
先贴一下我目前的B站首页状态与拦截规则:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| !拦截B站首页顶图 bilibili.com##div.bili-header__banner ! CSS 注入:添加导航栏背景色,以及边距 bilibili.com#$#.bili-header { background-color: #39C5BB !important;margin-bottom: 30px !important; } !拦截B站首页分区导航栏 bilibili.com##div.bili-header__channel !拦截B站首页分区导航栏里的彩色滚动项 bilibili.com##ul.left-entry > li.left-loc-entry !拦截B站首页轮播大图 bilibili.com##div.recommended-swipe !拦截B站首页的直播卡片 bilibili.com##div.bili-live-card !拦截B站首页的分类卡片 bilibili.com##div.floor-single-card !拦截B站动态右侧的话题一列 bilibili.com##aside.right !拦截B站视频里弹出的一健三连,投票 bilibili.com##div.bili-danmaku-x-follow-to-electric bilibili.com##div.bili-danmaku-x-guide-all bilibili.com##div.bili-danmaku-x-guide bilibili.com##div.bili-danmaku-x-vote !拦截B站首页指定up主名称的视频(一条为最上层可刷新的,另一条为瀑布流固定刷新的) bilibili.com###i_cecream > div.bili-feed4 > main.bili-feed4-layout > div.feed2 > div.recommended-container_floor-aside > div.container.is-version8 > div.feed-card:has( > div.bili-video-card.is-rcmd.enable-no-interest > div.bili-video-card__wrap.__scale-wrap > div.bili-video-card__info.__scale-disable > div.bili-video-card__info--right > div.bili-video-card__info--bottom > a.bili-video-card__info--owner > span.bili-video-card__info--author:has-text(/小姐姐|小仙女|小哥哥|老师|说车|医生|大佬|同学$/)) bilibili.com###i_cecream > div.bili-feed4 > main.bili-feed4-layout > div.feed2 > div.recommended-container_floor-aside > div.container.is-version8 > div.bili-video-card.is-rcmd.enable-no-interest:has( > div.bili-video-card__wrap.__scale-wrap > div.bili-video-card__info.__scale-disable > div.bili-video-card__info--right > div.bili-video-card__info--bottom > a.bili-video-card__info--owner > span.bili-video-card__info--author:has-text(/小姐姐|小仙女|小哥哥|老师|说车|医生|大佬|同学$/)) bilibili.com###i_cecream > div.bili-feed4 > main.bili-feed4-layout > div.feed2 > div.recommended-container_floor-aside > div.container.is-version8 > div.feed-card:has( > div.bili-video-card.is-rcmd.enable-no-interest > div.bili-video-card__wrap.__scale-wrap > div.bili-video-card__info.__scale-disable > div.bili-video-card__info--right > div.bili-video-card__info--bottom > a.bili-video-card__info--owner > span.bili-video-card__info--author:has-text(/^AI|ai|爱吃|显卡少女|程序员/)) bilibili.com###i_cecream > div.bili-feed4 > main.bili-feed4-layout > div.feed2 > div.recommended-container_floor-aside > div.container.is-version8 > div.bili-video-card.is-rcmd.enable-no-interest:has( > div.bili-video-card__wrap.__scale-wrap > div.bili-video-card__info.__scale-disable > div.bili-video-card__info--right > div.bili-video-card__info--bottom > a.bili-video-card__info--owner > span.bili-video-card__info--author:has-text(/^AI|ai|爱吃|显卡少女|程序员/)) bilibili.com###i_cecream > div.bili-feed4 > main.bili-feed4-layout > div.feed2 > div.recommended-container_floor-aside > div.container.is-version8 > div.feed-card:has( > div.bili-video-card.is-rcmd.enable-no-interest > div.bili-video-card__wrap.__scale-wrap > div.bili-video-card__info.__scale-disable > div.bili-video-card__info--right > div.bili-video-card__info--bottom > a.bili-video-card__info--owner > span.bili-video-card__info--author:has-text(/穿毛裤的小拉泽/)) bilibili.com###i_cecream > div.bili-feed4 > main.bili-feed4-layout > div.feed2 > div.recommended-container_floor-aside > div.container.is-version8 > div.bili-video-card.is-rcmd.enable-no-interest:has( > div.bili-video-card__wrap.__scale-wrap > div.bili-video-card__info.__scale-disable > div.bili-video-card__info--right > div.bili-video-card__info--bottom > a.bili-video-card__info--owner > span.bili-video-card__info--author:has-text(/穿毛裤的小拉泽/)) bilibili.com###i_cecream > div.bili-feed4 > main.bili-feed4-layout > div.feed2 > div.recommended-container_floor-aside > div.container.is-version8 > div.feed-card:has( > div.bili-video-card.is-rcmd.enable-no-interest > div.bili-video-card__wrap.__scale-wrap > div.bili-video-card__info.__scale-disable > div.bili-video-card__info--right > div.bili-video-card__info--bottom > a.bili-video-card__info--owner > span.bili-video-card__info--author:has-text(/瞎问虾猜丶/)) bilibili.com###i_cecream > div.bili-feed4 > main.bili-feed4-layout > div.feed2 > div.recommended-container_floor-aside > div.container.is-version8 > div.bili-video-card.is-rcmd.enable-no-interest:has( > div.bili-video-card__wrap.__scale-wrap > div.bili-video-card__info.__scale-disable > div.bili-video-card__info--right > div.bili-video-card__info--bottom > a.bili-video-card__info--owner > span.bili-video-card__info--author:has-text(/瞎问虾猜丶/))
!拦截B站首页指定标题的视频(一条为最上层可刷新的,另一条为瀑布流固定刷新的) bilibili.com###i_cecream > div.bili-feed4 > main.bili-feed4-layout > div.feed2 > div.recommended-container_floor-aside > div.container.is-version8 > div.feed-card:has( > div.bili-video-card.is-rcmd.enable-no-interest > div.bili-video-card__wrap.__scale-wrap > div.bili-video-card__info.__scale-disable > div.bili-video-card__info--right > h3.bili-video-card__info--tit > a:has-text(/黑神话|黑悟空|黑猴|原神|米哈游|星穹铁道|鸣潮|碧蓝航线|明日方舟/)) bilibili.com###i_cecream > div.bili-feed4 > main.bili-feed4-layout > div.feed2 > div.recommended-container_floor-aside > div.container.is-version8 > div.bili-video-card.is-rcmd.enable-no-interest:has( > div.bili-video-card__wrap.__scale-wrap > div.bili-video-card__info.__scale-disable > div.bili-video-card__info--right > h3.bili-video-card__info--tit> a:has-text(/黑神话|黑悟空|黑猴|原神|米哈游|星穹铁道|鸣潮|碧蓝航线|明日方舟/)) bilibili.com###i_cecream > div.bili-feed4 > main.bili-feed4-layout > div.feed2 > div.recommended-container_floor-aside > div.container.is-version8 > div.feed-card:has( > div.bili-video-card.is-rcmd.enable-no-interest > div.bili-video-card__wrap.__scale-wrap > div.bili-video-card__info.__scale-disable > div.bili-video-card__info--right > h3.bili-video-card__info--tit > a:has-text(/^爆肝|挑战|一分钟|一口气/)) bilibili.com###i_cecream > div.bili-feed4 > main.bili-feed4-layout > div.feed2 > div.recommended-container_floor-aside > div.container.is-version8 > div.bili-video-card.is-rcmd.enable-no-interest:has( > div.bili-video-card__wrap.__scale-wrap > div.bili-video-card__info.__scale-disable > div.bili-video-card__info--right > h3.bili-video-card__info--tit> a:has-text(/^爆肝|挑战|一分钟|一口气/)) !拦截B站热门里的指定标题视频 bilibili.com###app > div.popular-container > div.popular-video-container.popular-list > div.flow-loader > ul.card-list > div.video-card:has( > div.video-card__info > p.video-name:has-text(/原神|米哈游|星穹铁道|鸣潮|碧蓝航线|明日方舟/)) !拦截B站搜索框文本 !ra表示移除后面指定的元素属性,位于指定元素内, bilibili.com##+js(ra, placeholder, .nav-search-input) bilibili.com##+js(ra, title, .nav-search-input)
|
AdGuard的介绍
摘抄自官网:
AdGuard 广告拦截器可有效的拦截所有网页上的所有类型的广告,甚至是在 Facebook,Youtube 以及其它网站的广告!
AdGuard AdBlocker 可以这样:
拦截所有广告,包括:
视频广告(还包括 Youtube 视频广告~)
各种媒体广告,例如视频广告,插播广告和浮动广告!
令人讨厌的弹窗广告。
横幅广告和文字广告(包括 Facebook 广告~)
加速页面载入,节省带宽,屏蔽广告和弹窗!wow
拦截各种间谍软件,广告软件和拨号安装程序(可选)
通过拦截常见第三方跟踪系统保护您的隐私(可选)
保护您对抗恶意和钓鱼攻击(可选)
AdGuard 广告拦截器是如何保护您的隐私?
您只需在 Adugard 的设置内开启”间谍软件和跟踪过滤器”。它就完全可以移除互联网上的所有形式的跟踪。AdGuard 拥有超过 5000 条规则的超大跟踪器过滤器。
AdGuard 如何移除社交媒体的按钮?
您已经厌烦了滋生于您经常访问的网页上的 “赞” 按钮以及类似的小工具了吗?您只需开启 AdGuard 的“社交媒体过滤器” 即可~
AdGuard 广告拦截器如何使您免受在线威胁?
如今我们拥有超过一百八十万个有害网站的记录。AdGuard 可以拦截已知的传播恶意软件的网站,使您的计算机免受病毒、特洛伊木马、蠕虫、间谍软件和广告软件的骚扰。可以自信地说:AdGuard 大大降低了病毒感染的风险,阻止访问有害网站以防止潜在的攻击!
==============================
发行标记:
https://github.com/AdguardTeam/AdguardBrowserExtension/releases
==============================
插件免费开源代码:
https://github.com/AdguardTeam/AdguardBrowserExtension
==============================
发现了 Bug?还是遇到了需要帮助的问题?那请访问我们的论坛寻求帮助吧~链接在这里: https://forum.adguard.com/
AdGuard的使用
- 在浏览器的插件商店下载安装AdGuard(图例为微软自带浏览器Edge的【获取扩展】页面)

- 点开插件面板,点击右上角进入设置(如若没有在此处,点击该图右上角黑灰色按钮打开【扩展列表】,勾选对应的小眼睛图标)


用户自定义规则
使用场景介绍
前面提到的订阅在线链接的规则,其本意仅仅只是拦截广告。
而有时我们希望一些不是广告的东西也被拦截掉,或者是有一些应该被拦截的广告没被拦截(未收录到在线规则中);
这时就需要我们自己编写规则了。
编写规则
主要介绍我自己常用的,且顺手的规则。
完整的语法规则,可以看官网的教程How to create your own ad filters | AdGuard Knowledge Base
其中有一句提到了“最初,AdGuard的语法是基于Adblock Plus规则的语法。后来,我们用新类型的规则扩展了它,以更好地过滤广告。”
所以说,我们也可以从Adblock Plus官网学习一些语法规则How to write filters – Adblock Plus
摘要一下常用的:
任何以感叹号开头的行都是注释。在规则列表中,它以灰色显示,AdGuard会忽略这一行。
##双井号用于拦截指定html元素(使用CSS选择器的语法)
#@#表示无视、不拦截某元素
||双竖线用于表示拦截域名网址(可以精准到域名下的某些目录、某些文件格式,详情看官网语法教程)
@@||用于表示无视、不拦截某网址内容,相当于白名单
此外还有一些特殊的语法规则,这个我们后面一个个说。
举例的话,我贴一段其他人写的规则:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| !酷安"提到的好物" ||coolapk.com/v6/page/dataList?$replace=/extra_entities// ||coolapk.com/v6/feed/detail?$replace=/extra_entities// ||coolapk.com/v6/main/indexV?$replace=/extra_entities// ||coolapk.com/v6/feed/detail?$replace=/extra_title// ||coolapk.com/v6/feed/detail?$replace=/include_goods//
!去除"什么值得买" ||coolapk.com/v6/main/indexV8?$replace=/\{"entityType":"card"\,"entityTemplate":"listCard".*?\}\,\{"id/{"id/ !去除热搜 ||coolapk.com/v6/main/init?$replace=/\{"data":\[\{"entityType":"card"\,"entityTemplate":"textCard"\,"title":"\\u70ed\\u95e8\\u641c\\u7d22".*?\}\,\{"entityType":"card"\,"entityTemplate":"configCard"/\{"data":[\{"entityType":"card"\,"entityTemplate":"configCard"/ ||coolapk.com/v6/search?type=hotSearch$replace=/\{"data":\[.*\]/{"data":[]/ !去除随机应用推荐 ||coolapk.com/v6/main/indexV8?$replace=/\,\{.*?"entityType": "card"\,"entityTemplate":"apkImageCard".*?\}\,\{"id"/,{"id"/ !去除评论区下某广告 ||coolapk.com/v6/feed/detail?$replace=/detailSponsorCard//
! 信息流及评论区广告 ||ctobsnssdk.com^ ||pangolin.snssdk.com^ ||pangolin-sdk-toutiao.com^ ||pangolin-sdk-toutiao-b.com^ ||pglstatp-toutiao.com^ ||umeng.com^ ||tnc*.zijieapi.com^$app ! 帖子详情好物推荐 ||api2.coolapk.com/v6/feed/detail$replace=/"_ids":\[.*?]\,"":\[.*?]\,/ / ! 帖子详情赞助内容 ||api2.coolapk.com/v6/feed/detail$replace=/\,"":{.*}/}}/ ! 发现页去除酷品 ||api2.coolapk.com/v6/main/init$replace=/{"id":1170.*?}\,/ / ! 应用游戏页去除推广视频 ||api2.coolapk.com/v6/page/dataList$replace=/{"entityType":"card"\,"entityTemplate":"apkImageCard".*?\\u0022}"}\,/ / ! 去除首页还有什么值得买推广 ||api2.coolapk.com/v6/main/indexV8$replace=/{"entityType":"card"\,"entityTemplate":"listCard".*?}"}\,/ /
! -------白名单Start------- ! ! AdGuard @@||local.adguard.org^
! Edge新闻 @@||www.msn.cn/spartan/mmx^
! 银联 @@||yyfweb.postar.cn^
! Bilibili bilibili.com#@#.btn-ctnr
|
特定情况下的规则教程
JS语法下,拦截元素属性
B站的搜索框总是会自己显示当下的个性化热搜内容,如果要拦截这个内容,我们可以先用浏览器的F12【开发者工具】,查看网页的HTML源码。
(Edge浏览器也可以右键,点击【检查】)

然后直接双击右侧源码部分,修改一下值,验证一下是不是它,不要怕,整个页面重新刷新就会恢复的。

如图,可以确定是input元素内的placeholder 值影响搜索框的文本。
当然,我们似乎可以直接拦截这个input元素,让我们试试直接在右侧检查工具内,右键【删除元素】
最后结果似乎可行,不过如果我们回到左侧点击搜索框,会发现搜索框无法打开了,无法输入文本。
因此我们不能拦截,也就是删除元素,只能去修改元素的属性。
1 2 3
| <div class="nav-search-content"> <input class="nav-search-input" type="text" autocomplete="off" accesskey="s" maxlength="100" x-webkit-speech="" x-webkit-grammar="builtin:translate" value="" placeholder="苹果16发布会" title="苹果16发布会"> </div>
|
对于该HTML代码,由于我们要修改的内容是存在于元素的尖括号内,而不是元素的内容。
同时我们并不是直接拦截掉整个元素,仅仅只是修改尖括号内的内容,这时我们就需要使用如下代码规则。
bilibili.com##+js(ra, placeholder, .nav-search-input)
bilibili.com##+js(ra, title, .nav-search-input)
ra表示移除后面指定的元素属性。
placeholder和title是识别要操作的元素属性。
.nav-search-input是识别要操作的元素。
css语法下,锁定包含关键词内容的元素
有的时候,我们希望拦截能够智能化一点,可以拦截指定的内容。
比如说B站主页推送的视频,能拦截某些营销号的视频。
比方说我在文章开头贴的规则之一 之二:
!拦截B站首页指定up主名称的视频(一条为最上层可刷新的,另一条为瀑布流固定刷新的)
bilibili.com###i_cecream > div.bili-feed4 > main.bili-feed4-layout > div.feed2 > div.recommended-container_floor-aside > div.container.is-version8 > div.feed-card:has( > div.bili-video-card.is-rcmd.enable-no-interest > div.bili-video-card__wrap.__scale-wrap > div.bili-video-card__info.__scale-disable > div.bili-video-card__info–right > div.bili-video-card__info–bottom > a.bili-video-card__info–owner > span.bili-video-card__info–author:has-text(/小姐姐|小仙女|小哥哥|老师|说车|医生|大佬|同学$/))
bilibili.com###i_cecream > div.bili-feed4 > main.bili-feed4-layout > div.feed2 > div.recommended-container_floor-aside > div.container.is-version8 > div.bili-video-card.is-rcmd.enable-no-interest:has( > div.bili-video-card__wrap.__scale-wrap > div.bili-video-card__info.__scale-disable > div.bili-video-card__info–right > div.bili-video-card__info–bottom > a.bili-video-card__info–owner > span.bili-video-card__info–author:has-text(/小姐姐|小仙女|小哥哥|老师|说车|医生|大佬|同学$/))
这段规则就有很多内容可以讲了,先说说该规则的效果。
该规则会拦截名称为“小姐姐|小仙女|小哥哥|老师|说车|医生|大佬|同学”这几个词之一作结尾的up主视频。
这是个人的主观看法,up主名称为这些的很大概率为营销号;
因为我个人觉得正常非商业目的的话,创号应该不会专门去起这种名字,而是更加的网名化。(我宁可一刀切)
先说下怎么写的
确定元素
首先我们可以理由插件自带的快速选中功能,点开插件菜单,点击【拦截此网站上的广告】,然后选定视频卡的up主名称。

选中后,我们打开高级设置,把文本框内的规则全选复制出来。
bilibili.com###i_cecream > div.bili-feed4:last-child > main.bili-feed4-layout:nth-child(3) > div.feed2:last-child > div.recommended-container_floor-aside > div.container.is-version8:first-child > div.feed-card:nth-child(4) > div.bili-video-card.is-rcmd.enable-no-interest > div.bili-video-card__wrap.__scale-wrap:last-child > div.bili-video-card__info.__scale-disable:last-child > div.bili-video-card__info–right > div.bili-video-card__info–bottom:last-child > a.bili-video-card__info–owner > span.bili-video-card__info–author:nth-child(2)
值得注意的是,AdGuard默认是识别某指定元素的第几个,也就是以上规则中的:last-child、:nth-child(2)、:last-child。
一般情况下,这很有效,但在该情景下,并不合适,所以我们先全部删了。
bilibili.com###i_cecream > div.bili-feed4 > main.bili-feed4-layout > div.feed2 > div.recommended-container_floor-aside > div.container.is-version8 > div.feed-card > div.bili-video-card.is-rcmd.enable-no-interest > div.bili-video-card__wrap.__scale-wrap > div.bili-video-card__info.__scale-disable > div.bili-video-card__info–right > div.bili-video-card__info–bottom > a.bili-video-card__info–owner > span.bili-video-card__info–author
目前依旧是识别的up主文本,而我们的目标是拦截整个视频。
我们可以试一试,继续在在AdGuard的拦截页面调节范围,往左调(放大)到超过该视频,然后退一步回来,这样就是最完整的视频卡元素。

bilibili.com###i_cecream > div.bili-feed4:last-child > main.bili-feed4-layout:nth-child(3) > div.feed2:last-child > div.recommended-container_floor-aside > div.container.is-version8:first-child > div.feed-card:nth-child(4)
可以看到,这个视频卡的元素是div.feed-card。
如果我们在B站,往后翻几页,在进行这个检查,会发现视频卡元素变成了div.bili-video-card,所以我们才会一个需求写成两条规则。
处理识别关键词的问题
- 我们使用的就是:has()这个语法去标识含有up主名称的视频。
- 再使用:has-txet()这个语法去标识包含关键词的up主名。
- 然后使用正则表达式去匹配文本。
正则表达式的语法我们就不在此介绍了。
因此就写成了开头的样子。
CSS语法下,修改页面样式
B站导航栏的文本式纯白色的,而页面背景也是纯白色的,所以直接拦截导航图后会导致看不到导航栏的文本。所以我们需要修改一下导航栏的背景颜色。
另外拦截导航图后,底下的视频卡会跟导航栏挨在一起,不美观,所以也添加了边距。
! CSS 注入:添加导航栏背景色,以及边距
bilibili.com#$#.bili-header { background-color: #39C5BB !important;margin-bottom: 30px !important; }